在DataFrame中反转列顺序的最大复杂性是什么?

您所在的位置:网站首页 numpy 反序 在DataFrame中反转列顺序的最大复杂性是什么?

在DataFrame中反转列顺序的最大复杂性是什么?

#在DataFrame中反转列顺序的最大复杂性是什么?| 来源: 网络整理| 查看: 265

匿名用户

大O复杂度(Pandas 0.24)是m*n,其中m是列数,n是行数。请注意,这是在使用DataFrame.__getitem__方法(又名[])和Index(请参阅相关代码,其他类型会触发副本)时使用的。

下面是一个有用的堆栈跟踪:

(2)() 1 columns = df.columns[::-1] ----> 2 df_reversed = df[columns] pandas/core/frame.py(2682)__getitem__() 2681 # either boolean or fancy integer index -> 2682 return self._getitem_array(key) 2683 elif isinstance(key, DataFrame): pandas/core/frame.py(2727)_getitem_array() 2726 indexer = self.loc._convert_to_indexer(key, axis=1) -> 2727 return self._take(indexer, axis=1) 2728 pandas/core/generic.py(2789)_take() 2788 axis=self._get_block_manager_axis(axis), -> 2789 verify=True) 2790 result = self._constructor(new_data).__finalize__(self) pandas/core/internals.py(4539)take() 4538 return self.reindex_indexer(new_axis=new_labels, indexer=indexer, -> 4539 axis=axis, allow_dups=True) 4540 pandas/core/internals.py(4421)reindex_indexer() 4420 new_blocks = self._slice_take_blocks_ax0(indexer, -> 4421 fill_tuple=(fill_value,)) 4422 else: pandas/core/internals.py(1254)take_nd() 1253 new_values = algos.take_nd(values, indexer, axis=axis, -> 1254 allow_fill=False) 1255 else: > pandas/core/algorithms.py(1658)take_nd() 1657 import ipdb; ipdb.set_trace() -> 1658 func = _get_take_nd_function(arr.ndim, arr.dtype, out.dtype, axis=axis, 1659 mask_info=mask_info) 1660 func(arr, indexer, out, fill_value)

L1660中的func调用熊猫/core/算法最终调用复杂度为O(m*n)的cython函数。这是原始数据的数据被复制到out的地方。out包含原始数据的反序副本。

inner_take_2d_axis0_template = """\ cdef: Py_ssize_t i, j, k, n, idx %(c_type_out)s fv n = len(indexer) k = values.shape[1] fv = fill_value IF %(can_copy)s: cdef: %(c_type_out)s *v %(c_type_out)s *o #GH3130 if (values.strides[1] == out.strides[1] and values.strides[1] == sizeof(%(c_type_out)s) and sizeof(%(c_type_out)s) * n >= 256): for i from 0


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3